home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Belgian Amiga Club - ADF Collection
/
BS1 part 19.zip
/
BS1 part 19
/
Laserdisk.adf
/
ABalls
/
balls
(
.txt
)
< prev
next >
Wrap
AmigaBASIC Source Code
|
1987-05-06
|
12KB
|
545 lines
' Agressive Balls
' Juli 1987 MS-Soft
' Michael Schönborn
SCREEN 2,328,260,5,1
WINDOW 2,"AGRESSIVE BALLS FANG AGRESSIVE BALLS",,2,2
pi=3.14159
FOR f=0 TO 30
PALETTE f,0,0,5/16
NEXT
PALETTE 31,1,1,1
DIM h0%(83),h1%(83),h2%(83),h3%(83) 'FIGUREN
DIM h4%(83),h5%(83),h6%(83),h7%(83),h8%(83)
DIM h9%(83),h10%(83),h11%(83),h12%(83)
COLOR 31,30:CLS
GOSUB defin
welle
CLS
RESTORE farben
FOR f=0 TO 31
READ r,g,b:PALETTE f,r/16,g/16,b/16
NEXT
farben:
DATA 0,0,12,0,0,5,0,0,5,0,0,5
DATA 1,2,12,3,3,13,4,4,14,6,6,15
DATA 0,0,5,0,0,0,0,0,0
DATA 0,0,5,0,0,12,1,2,12,3,3,13,4,4,14,6,6,15
DATA 7,0,15,11,3,14,13,7,14,10,0,0,11,2,2
DATA 12,3,3,14,5,5,15,8,8,0,8,0
DATA 1,10,1,2,11,2,4,13,4,6,15,6
DATA 0,0,5,8,9,0
MENU 1,0,1,"Balls"
MENU 1,2,1,"MS-SOFT"
MENU 1,3,1,"c 1987
MENU 2,0,1,"Musik"
MENU 2,2,1,"Musik an"
MENU 2,3,1,"Musik aus"
ON MENU GOSUB menue
MENU ON
bild
hi$="MS":hsc=100:f1=9
start:
leb=5:s=0:sc=0
beginn:
xs=16:ys=160
xa1=288:ya1=16:yya1=ya1:xxa1=xa1
xa2=288:ya2=224:xxa2=xa2:yya2=ya2
GOSUB zeichnen
COLOR 16,0
LOCATE 1,1:PRINT "PUNKTE: LEBEN: ";hi$;": "
leben (leb):score (sc):high(hsc)
pu=0:start=13
RESTORE musik
ON TIMER(4) GOSUB musik
TIMER ON
GET (xa1,ya1)-(xa1+15,ya1+15),h9%
GET (xa2,ya2)-(xa2+15,ya2+15),h10%
spielerfig
GOSUB angreifer1
GOSUB angreifer2
loop1:
GOSUB angreiferbew
GOSUB angreiferbew2
GOSUB spieler
IF pu=max THEN schluss
GOTO loop1
angreiferbew:
xsa=(xa1-xs):ysa=(ya1-ys)
IF ABS(xsa)<=16 AND ABS(ysa)<=16 THEN GOTO zusammenstoss
IF ysa=0 THEN GOTO an1
y=ya1-2*SGN(ysa)
p1=POINT (xa1,y-15*(SGN(ysa)<0))
p2=POINT (xa1+15,y-15*(SGN(ysa)<0))
IF p1<f1 AND p2<f1 THEN sprung1=0:ya1=y:GOTO angreifer1
an1: IF sprung1=1 THEN GOTO loop2
x=xa1-2*SGN(xsa)
p1=POINT (x-15*(SGN(xsa)<0),ya1)
p2=POINT (x-15*(SGN(xsa)<0),ya1+15)
IF p1<f1 AND p2<f1 THEN xa1=x:GOTO angreifer1
loop2:
x=xa1+2*SGN(xsa)
p1=POINT (x-15*(SGN(xsa)>0),ya1)
p2=POINT (x-15*(SGN(xsa)>0),ya1+15)
IF p1<f1 AND p2<f1 THEN xa1=x:sprung1=1:GOTO angreifer1
sprung1=0:xxa1=xa1:yya1=ya1
RETURN
angreiferbew2:
xsa=(xa2-xs):ysa=(ya2-ys)
IF ABS(xsa)<=16 AND ABS(ysa)<=16 THEN GOTO zusammenstoss
IF xsa=0 THEN GOTO an2
x=xa2-2*SGN(xsa)
p1=POINT (x-15*(SGN(xsa)<0),ya2)
p2=POINT (x-15*(SGN(xsa)<0),ya2+15)
IF p1<f1 AND p2<f1 THEN xa2=x:sprung2=0:GOTO angreifer2
an2: IF sprung2=1 THEN GOTO loop3
y=ya2-2*SGN(ysa)
p1=POINT (xa2,y-15*(SGN(ysa)<0))
p2=POINT (xa2+15,y-15*(SGN(ysa)<0))
IF p1<f1 AND p2<f1 THEN ya2=y:GOTO angreifer2
loop3:
y=ya2+2*SGN(ysa)
p1=POINT (xa2,y-15*(SGN(ysa)>0))
p2=POINT (xa2+15,y-15*(SGN(ysa)>0))
IF p1<f1 AND p2<f1 THEN ya2=y:sprung2=1:GOTO angreifer2
sprung2=0:xxa2=xa2:yya2=ya2
RETURN
spieler:
ix=STICK(2):iy=STICK(3)
IF iy=-1 AND POINT(xs,ys-2)<f1 THEN
IF POINT(xs+15,ys-2)<f1 THEN
ys=ys-2:GOTO loop4
END IF
END IF
IF iy=1 AND POINT(xs,ys+17)<f1 THEN
IF POINT(xs+15,ys+17)<f1 THEN
ys=ys+2:GOTO loop4
END IF
END IF
IF ix=-1 AND POINT(xs-2,ys)<f1 THEN
IF POINT(xs-2,ys+15)<f1 THEN
xs=xs-2:GOTO loop4
END IF
END IF
IF ix=1 AND POINT(xs+17,ys)<f1 THEN
IF POINT(xs+17,ys+15)<f1 THEN
xs=xs+2:GOTO loop4
END IF
END IF
loop4:
IF ix=1 OR iy=1 THEN x=15:y=15 :ELSE x=0:y=0
FOR xx=0 TO 15 STEP 4
xp=xs+x*ABS(ix)+xx*ABS(iy)
yp=ys+y*ABS(iy)+xx*ABS(ix)
IF POINT (xp,yp)<8 THEN GOTO punkt
NEXT
loop7:
spielerfig
RETURN
punkt: pu=pu+1
sc=sc+s+1:score (sc)
SOUND 1760,2,255,1
x=INT(xp/16)*16
y=INT(yp/16)*16
PUT (x,y),h12%,PSET
GOTO loop7
SUB spielerfig STATIC
SHARED h8%(),xs,ys
PUT(xs,ys),h8%,PSET
END SUB
angreifer1:
PUT (xxa1,yya1),h9%,PSET
GET (xa1,ya1)-(xa1+15,ya1+15),h9%
PUT (xa1,ya1),h6%,PSET
xxa1=xa1:yya1=ya1
RETURN
angreifer2:
PUT (xxa2,yya2),h10%,PSET
GET (xa2,ya2)-(xa2+15,ya2+15),h10%
PUT (xa2,ya2),h7%,PSET
xxa2=xa2:yya2=ya2
RETURN
schluss: sc=sc+s*1000+1000+1000*leb:
score(sc)
s=s+1:IF s=smax+1 THEN s=0
leb=5:leben (leb)
GOTO beginn
SUB leben (leb) STATIC
LOCATE 1,21:PRINT leb
END SUB
SUB score (sc) STATIC
IF sc<1000000 THEN
LOCATE 1,8:PRINT USING"######";sc
END IF
END SUB
SUB high (hsc) STATIC
SHARED hi$
LOCATE 1,24:PRINT hi$
LOCATE 1,27:PRINT USING"######";hsc
END SUB
zusammenstoss:
SOUND 880,18,255,1
leb=leb-1:leben(leb)
IF leb=0 THEN GOTO ende
PUT (xxa2,yya2),h10%,PSET
PUT (xxa1,yya1),h9%,PSET
xa1=288:ya1=16:yya1=ya1:xxa1=xa1
xa2=288:ya2=224:xxa2=xa2:yya2=ya2
GET (xa2,ya2)-(xa2+15,ya2+15),h10%
PUT (xa2,ya2),h7%,PSET
GET (xa1,ya1)-(xa1+15,ya1+15),h9%
PUT (xa1,ya1),h6%,PSET
GOTO loop1
ende:
TIMER OFF
COLOR 31
LOCATE 13,13:PRINT "GAME OVER"
FOR i=4000 TO 100 STEP -50
SOUND i,1,255,3
NEXT
CLS
IF sc>hsc THEN
hsc=sc
LOCATE 4,3:
PRINT "Sie haben den Highscore":PRINT " verbessert!"
LOCATE 6,3:INPUT "Wie lauten Ihre Initialen";hi$
hi$=UCASE$(LEFT$(hi$,2))
LOCATE 9,3
PRINT "Neuer Highscore (";USING"######";hsc;
PRINT ")"
LOCATE 11,11:PRINT "von ";hi$;" !"
END IF
LOCATE 14,1:PRINT "Wollen Sie es noch einmal"
PRINT "versuchen";
INPUT"(j/n)";j$:j$=UCASE$(j$)
IF j$="J" THEN GOTO start
LOCATE 17,12:PRINT "ENDE"
END
defin:
LOCATE 12,11:PRINT "Bitte warten!"
RESTORE rohr 'Rohr horizontal, vertikal, Ecken
x=0
FOR f=12 TO 16
READ i
FOR j=1 TO i
LINE (x,0)-(x,15),f
LINE (15-x,0)-(15-x,15),f
x=x+1
NEXT
NEXT
GET (0,0)-(15,15),h0%
RESTORE rohr
x=0
FOR f=12 TO 16
READ i
FOR j=1 TO i
LINE (0,x)-(15,x),f
LINE (0,15-x)-(15,15-x),f
x=x+1
NEXT
NEXT
GET (0,0)-(15,15),h1%
RESTORE rohr
x=0
FOR f=12 TO 16
READ i
LINE (x,x)-(15,15),f,bf
x=x+i
NEXT
RESTORE rohr2
FOR f=16 TO 12 STEP -1
READ i
LINE (x,x)-(15,15),f,bf
x=x+i
NEXT
GET (0,0)-(15,15),h2%
RESTORE rohr
x=0
FOR f=12 TO 16
READ i
LINE (15,0)-(x,15-x),f,bf
x=x+i
NEXT
RESTORE rohr2
FOR f=16 TO 12 STEP -1
READ i
LINE (15,0)-(x,15-x),f,bf
x=x+i
NEXT
GET (0,0)-(15,15),h3%
RESTORE rohr
x=0
FOR f=12 TO 16
READ i
LINE (0,15)-(15-x,x),f,bf
x=x+i
NEXT
RESTORE rohr2
FOR f=16 TO 12 STEP -1
READ i
LINE (0,15)-(15-x,x),f,bf
x=x+i
NEXT
GET (0,0)-(15,15),h4%
RESTORE rohr
x=0
FOR f=12 TO 16
READ i
LINE (0,0)-(15-x,15-x),f,bf
x=x+i
NEXT
RESTORE rohr2
FOR f=16 TO 12 STEP -1
READ i
LINE (0,0)-(15-x,15-x),f,bf
x=x+i
NEXT
GET (0,0)-(15,15),h5%
rohr: DATA 2,2,2,1,1
rohr2: DATA 1,1,2,2,2
LINE (0,0)-(15,15),8,bf
FOR i=1 TO 4
CIRCLE (8,8),5-i,3+i,,,1
PAINT (8,8),3+i
NEXT
GET (0,0)-(15,15),h11%
'Angreifer 1 und 2
LINE (0,0)-(15,15),30,bf
FOR k=0 TO 1
RESTORE kugeln
FOR i=0 TO 4
READ x
CIRCLE (8,8),x,20+i+k*5,,,1
PAINT (8,8),20+i+k*5
NEXT
IF k=0 THEN GET (0,0)-(15,15),h6%
IF k=1 THEN GET (0,0)-(15,15),h7%
NEXT
kugeln: DATA 7,6,4,2,1
'Punkte
LINE (0,0)-(15,15),8,bf
GET (0,0)-(15,15),h12%
'spieler
RESTORE spielfig
FOR i=2 TO 7
FOR j=0 TO 5
READ x
IF x=0 THEN x=30 :ELSE x=x+16
PSET (8+j,i),x:PSET (7-j,i),x
PSET (8+j,15-i),x:PSET (7-j,15-i),x
NEXT
NEXT
GET (0,0)-(15,15),h8%
spielfig:
DATA 1,0,0,0,0,0,2,1,0,0,0,0
DATA 3,2,1,0,0,0,3,2,1,1,0,0
DATA 3,3,2,2,1,1,1,3,3,3,2,2
'Spielfelder 0-3 werden definiert
'erweiterbar durch Ändern von smax
'0-vert, 1-hor, 2-li ob, 3-li un
'4-re ob, 5-re un, 6-Punkt
'In den Zeilen 0 und 13 jedes
'Schirmes muss als letzte Zahl eine
'6 stehen, ebenso als 1. Zahl in
'Zeile 9! Dort stehen Angreifer, bzw.
'Spielerfigur. Es sind auch Wege
'von diesen Positionen offenzuhalten!
'Schirmgröße: 18*14
smax=3
DIM s$(smax,13)
s$(0,0)="606666666666666666"
s$(0,1)="606211161111161146"
s$(0,2)="606066666666666606"
s$(0,3)="606066611114660606"
s$(0,4)="606314666660615666"
s$(0,5)="606660621460666661"
s$(0,6)="606060606066661466"
s$(0,7)="606060666662166346"
s$(0,8)="631115611160606606"
s$(0,9)="666666666660631606"
s$(0,10)="621111111660666606"
s$(0,11)="606666666660660606"
s$(0,12)="606111111166615606"
s$(0,13)="606666666660666666"
s$(1,0)="666666666666066666"
s$(1,1)="666066666666066211"
s$(1,2)="606066611466066066"
s$(1,3)="156066666311566066"
s$(1,4)="666311466666666666"
s$(1,5)="166666066666146111"
s$(1,6)="666666066666606666"
s$(1,7)="111146066666606066"
s$(1,8)="666606311111156066"
s$(1,9)="666606666666666311"
s$(1,10)="606606661114666666"
s$(1,11)="631156066660621146"
s$(1,12)="666666066660606606"
s$(1,13)="611111566115666606"
s$(2,0)="666666666666666666"
s$(2,1)="621111116611111146"
s$(2,2)="606666666666666606"
s$(2,3)="606211116611114606"
s$(2,4)="606066666666660606"
s$(2,5)="606062116611160606"
s$(2,6)="606660666666660666"
s$(2,7)="666066666666066606"
s$(2,8)="606061116611560606"
s$(2,9)="606066666666660606"
s$(2,10)="606311116611115606"
s$(2,11)="606666666666666606"
s$(2,12)="631111116611111156"
s$(2,13)="666666666666666666"
s$(3,0)="666666666666666666"
s$(3,1)="614611166211161616"
s$(3,2)="660666666066666066"
s$(3,3)="615606666666666666"
s$(3,4)="666666611116111166"
s$(3,5)="661111666666666666"
s$(3,6)="166666621146111166"
s$(3,7)="661111631156666661"
s$(3,8)="666666666666111166"
s$(3,9)="661111611116666666"
s$(3,10)="666666666666606216"
s$(3,11)="660666660666666066"
s$(3,12)="616161115661116316"
s$(3,13)="666666666666666666"
RETURN
zeichnen: COLOR ,11:CLS
PUT (0,0),h2%,PSET
FOR x=16 TO 288 STEP 16
PUT (x,0),h1%,PSET
NEXT
max=-1
PUT (304,0),h4%,PSET
FOR y=1 TO 14
PUT (0,y*16),h0%,PSET
FOR x=1 TO 18
z=VAL(MID$(s$(s,y-1),x,1))
IF z=6 THEN PUT (x*16,y*16),h11%,PSET:max=max+1 :ELSE
IF z=0 THEN PUT (x*16,y*16),h0%,PSET :ELSE
IF z=1 THEN PUT (x*16,y*16),h1%,PSET :ELSE
IF z=2 THEN PUT (x*16,y*16),h2%,PSET :ELSE
IF z=3 THEN PUT (x*16,y*16),h3%,PSET :ELSE
IF z=4 THEN PUT (x*16,y*16),h4%,PSET :ELSE
IF z=5 THEN PUT (x*16,y*16),h5%,PSET
NEXT x
PUT (304,y*16),h0%,PSET
NEXT y
PUT (0,240),h3%,PSET
FOR x=16 TO 288 STEP 16
PUT (x,240),h1%,PSET
NEXT
PUT (304,240),h5%,PSET
RETURN
SUB welle STATIC
SHARED pi
DIM form%(255)
pi2=2*pi/255
FOR i=0 TO 255
form%(i)=SIN(pi2*i)+SIN(6*pi2*i)+SIN(0.33*pi2*i)
form%(i)=((form%(i)+SIN(3*pi2*i))/4)*127
NEXT
WAVE 0,form%
ERASE form%
END SUB
musik: IF music=0 THEN RETURN
start=start+12
IF start>13 THEN start=1:RESTORE musik
SOUND WAIT
FOR ton=start TO start+11
READ f
IF f>1000 THEN f=f-1000:l=10.6 :ELSE l=4.55
SOUND f,l,255,0
NEXT
SOUND RESUME
RETURN
DATA 1130.8,146.8,164.8,174.6,196
DATA 164.8,1196,220,174.6,1220,196
DATA 164.8,1196,130.8,146.8,164.8,174.6,196
DATA 164.8,1196,174.6,164.8,146.8,1130.8
menue: m=MENU(0):mm=MENU(1)
IF m=2 AND mm=3 THEN music=0
IF m=2 AND mm=2 THEN music=1
RETURN
SUB bild STATIC
SHARED h6%(),h7%(),h8%(),h11%()
CLS
DIM a$(4)
a$(0)="1110222010002000222"
a$(1)="1010202010002000200"
a$(2)="1110222010002000222"
a$(3)="1010202010002000002"
a$(4)="1110202011102220222"
FOR y=0 TO 4
FOR x=1 TO 19
i=VAL(MID$(a$(y),x,1))
IF i=0 THEN GOTO loop9
IF i=1 THEN PUT ((x-1)*16,y*16),h6%,PSET
IF i=2 THEN PUT ((x-1)*16,y*16),h7%,PSET
loop9:
NEXT
NEXT
FOR x=0 TO 32
SCROLL (0,0)-(320,112),0,1
NEXT
FOR y=1 TO 3
FOR x=12 TO 16 STEP 0.5
COLOR INT(x)
LOCATE 2,12:PRINT "AGRESSIVE"
NEXT
NEXT
COLOR 21:LOCATE 15,9:PRINT "by M. Schönborn"
PUT (16,144),h8%,PSET
PUT (16,176),h11%,PSET
COLOR 26:LOCATE 17,6:PRINT "Spielfigur"
LOCATE 21,6:PRINT "Pillen zum Fressen"
COLOR 31:LOCATE 23,1:PRINT "Joystick in Port 2!"
LOCATE 26,8:PRINT "Start mit > S <!"
j$=""
WHILE j$<>"S"
SOUND RND*100+100,1,255,3
j$=UCASE$(INKEY$)
WEND
END SUB